//書籍登録内容をチェックするクラス

package book;

import java.io.IOException;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EntryServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

//　入力パラメータの文字エンコーディング
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");

//　入力パラメータの取得
		String title 			= (String)request.getParameter("title");
		String genre 			= (String)request.getParameter("genre");
		String publisher 		= (String)request.getParameter("publisher");
		String writer 			= (String)request.getParameter("writer");
		String content 			= (String)request.getParameter("content");
		String publication_date = (String)request.getParameter("publication_date");
		String isbn 			= (String)request.getParameter("isbn");
		String picture			= (String)request.getParameter("picture");

//　必須項目にエラーがあった場合それを知らせる変数
		String title_redline 	= null;
		String genre_redline 	= null;
		String publisher_redline= null;
		String writer_redline 	= null;
		String publication_date_redline = null;
		String isbn_redline 	= null;

		String picture_redline 	= null;

		boolean blank 			= false;

		String error 			= null;

		String genre_error	 	= null;

		String path = "/book//userBookEntryCheck.jsp";

//　必須項目に空欄があった場合
		if(title==null||title.length()==0){
			title_redline 		= "red_frame";
			blank 				= true;
		}
		if(genre.equals("選択") || genre =="選択"){
			genre_redline 		= "red_frame";
			blank 				= true;
			}
		if(publisher==null||publisher.length()==0){
			publisher_redline 	= "red_frame";
			blank 				= true;
		}
		if(writer==null||writer.length()==0){
			writer_redline 		= "red_frame";
			blank 				= true;
		}
		if(publication_date==null||publication_date.length()==0){
			publication_date_redline = "red_frame";
			blank 				= true;
		}
		if(isbn==null||isbn.length()==0){
			isbn_redline 		= "red_frame";
			blank 				= true;
		}
		if(blank){
			error				= "error";
			path 				= "/book/userBookEntry.jsp";
		}


//======▼======入力確認処理追加【2013.10.17 yano】======▼======

//　エラーメッセージを格納するArrayListの生成
		ArrayList<String> error_message = new ArrayList<String>();
//　文字制限・半角英数字の確認（isbn、publication_date）
		if(!Isbncheck(isbn)){
			error_message.add("ISBNコードは、半角で入力して下さい");
		//	error = true;
			isbn_redline 		= "red_frame";
			path 				= "/book/userBookEntry.jsp";
		}

		if(!Isbncheck(picture)){
			error_message.add("画像ファイル名は、半角で入力して下さい");
		//	error = true;
			picture_redline 		= "red_frame";
			path 				= "/book/userBookEntry.jsp";
		}

		//　入力パターンを登録します
		Pattern pattern_publication_date = Pattern.compile("^[0-9]{4}[-][0-9]{2}[-][0-9]{2}$");

		//　指定された入力とこのパターンをマッチする正規表現エンジンを作成
		Matcher matcher_publication_date = pattern_publication_date.matcher(publication_date);

		//　入力された値が正規表現とマッチしているか調べる
		//　正規表現のパターンとマッチした場合にのみ true
		//　matches メソッドは、入力シーケンス全体とパターンをマッチする

		if( !matcher_publication_date.matches() ){
			error_message.add("発行年月日は、半角で、かつ YYYY-MM-DD の形式で入力して下さい");
		//	error = true;
			publication_date_redline = "red_frame";
			path 				= "/book/userBookEntry.jsp";
		}

		request.setAttribute( "error_message" , error_message );
     	request.setAttribute( "picture_redline" , picture_redline );

//======▲======入力確認処理追加【2013.10.17 yano】======▲======

//　リクエストスコープに"引数1"という名前で引数2の文字列を登録
		request.setAttribute("title", title);

		request.setAttribute( "title_redline" , title_redline );
     	request.setAttribute( "genre_redline" , genre_redline );
     	request.setAttribute( "publisher_redline" , publisher_redline );
     	request.setAttribute( "writer_redline" , writer_redline );
     	request.setAttribute( "publication_date_redline" , publication_date_redline );
     	request.setAttribute( "isbn_redline" , isbn_redline );
     	request.setAttribute( "picture_redline" , picture_redline );

     	request.setAttribute( "error" , error );
     	request.setAttribute( "genre_error" , genre_error );

		RequestDispatcher dispatcher = request.getRequestDispatcher(path);


//フォワードの実行　エラーがあれば書籍登録画面へ、なければ書籍登録確認画面へ遷移
		dispatcher.forward(request, response);
		}

//======▼======入力確認処理追加【2013.10.17 yano】======▼======

//　isbn、画像ファイル名は半角英数字のみなのでそれ以外の時はNG
	private boolean Isbncheck(String isbn){

		boolean check = true;

		 char[] chars = isbn.toCharArray();
	    for (int i = 0; i < chars.length; i++) {
	         char c = chars[i];
	         if ((c <= '\u007e') || // 英数字
	        	                (c == '\u00a5') || // \記号
	        	                (c == '\u203e') || // ~記号
	        	               (c >= '\uff61' && c <= '\uff9f') // 半角カナ
	 	        ) {  } else {
	        	             check = false;
	        	             break ;
	         }
		}
		return check;
	}

//======▲======入力確認処理追加【2013.10.17 yano】======▲======
}

